昨天講到,我們要使用streamObserver的樣板程式來監聽server端的response,所以我們就來看看這個樣板程式要怎麼製作吧!!
因為我們透過樣板程式來監聽server,因此我們要使用streamObserver的泛型,設計成request的格式,所以我們就在昨天留下來的TODO寫上:
StreamObserver<IronManProto.IronManRequest01> request01StreamObserver = ironManServiceStub.clients2Server()
透過監聽server回傳的資料,讓我們得知現在server到底回傳什麼給client端,然後再加上我們的樣板程式在clients2server裡面:
new StreamObserver<IronManProto.IronManResponse01>() {
@Override
public void onNext(IronManProto.IronManResponse01 value) {
System.out.println("我接收到server的回傳結果: " + value.getResult());
}
@Override
public void onError(Throwable t) {
}
@Override
public void onCompleted() {
System.out.println("回傳結束");
}
});
直接在clients2server加入樣板程式,透過這個樣板程式來監聽server端的回傳結果,並且在onNext()加上接收結果,在onCompleted()加上回傳結束的訊息提示。
這樣,我們整個stream client的程式就大功告成了,我們可以試試看把server跟client端都起來試試看結果。
我們先來看看server端收到的訊息:
確實每隔一秒鐘就收到一組訊息,再來看看client端:
Client也在所有的資料都傳遞結束後,順利監聽到server回傳的onCompleted()標籤,最後印出回傳結束的內容。
這樣我們就完成了client多發對server單發的內容啦!!